import { defineConfig ,ProxyOptions} from 'vite'
import path from "path";
import configManualChunk from "./config/optimizer";
import { VITE_DROP_CONSOLE, VITE_PORT, API_BASE_URL, API_TARGET_URL, MOCK_API_BASE_URL, MOCK_API_TARGET_URL } from './config/constant';
import createVitePlugin from "./config/plugin";


type ProxyTargetList = Record<string, ProxyOptions>

const proxy: ProxyTargetList = { // 为开发服务器配置自定义代理规则
  // 选项写法
  [API_BASE_URL]: {
    target: API_TARGET_URL, // 代理接口
    changeOrigin: true,
    rewrite: (newPath) => newPath.replace(new RegExp(`^${API_BASE_URL}`), '')
  },
  [MOCK_API_BASE_URL]: {
    target: MOCK_API_TARGET_URL, // 代理接口
    changeOrigin: true,
    rewrite: (newPath) => newPath.replace(new RegExp(`^${MOCK_API_BASE_URL}`), '')
  }
}

// https://vitejs.dev/config/
export default defineConfig({
  // base:'./',
  resolve:{
    alias:{
        "@": path.resolve(__dirname,"./src"),
    },
    extensions: ['.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json']
  },
  plugins: createVitePlugin(),
  optimizeDeps: {
    include: ['axios', 'mockjs'], // 引入第三方的配置,强制预构建插件包 'echarts' 等
  },
  build: {
    target: 'es2015', // 设置最终构建的浏览器兼容目标。modules:支持原生 ES 模块的浏览器
    outDir: 'dist', // 指定输出路径
    assetsDir: 'assets', // 指定生成静态资源的存放路径
    sourcemap: false, // 构建后是否生成 source map 文件
    minify: 'terser', // 混淆器，terser构建后文件体积更小
    chunkSizeWarningLimit: 4096000, // 打包限制大小 4000kb
    rollupOptions: { // 将大块分解成更小的块
      output: {
        manualChunks: configManualChunk
      }
    },
    terserOptions: {
      // 生产环境移除console
      compress: {
        keep_infinity: true,
        drop_console: VITE_DROP_CONSOLE,
        drop_debugger: true,
      },
    },
  },
  css: {
    // css预处理器
    preprocessorOptions: {
      less: {
        math:'always',
        modifyVars: {
          // 'primary-color': '#f99d34'
        },
        globalVars:{ // less 主动注入的全局变量

        },
        javascriptEnabled: true,
        additionalData: '@import "./src/global.less";'
      }
    },
    devSourcemap:true // 开发中是否生成可定位样式区域浏览器快速查找样式文件
  },
  server:{
    // hmr: { overlay: false }, // 禁用或配置 HMR 连接 设置 server.hmr.overlay 为 false 可以禁用服务器错误遮罩层
    origin: "http://localhost:3001",
    host: '0.0.0.0', // 指定服务器主机名
    port: VITE_PORT, // 指定服务器端口
    open: true, // 在服务器启动时自动在浏览器中打开应用程序
    headers: {
      'Access-Control-Allow-Origin': '*'
    },
    // strictPort: false, // 设为 false 时，若端口已被占用则会尝试下一个可用端口,而不是直接退出
    // https: false, // 是否开启 https
    cors: true, // 为开发服务器配置 CORS。默认启用并允许任何源
    proxy
  },

})
